// pages/healthlife/coursedetails/coursedetails.js
const app = getApp()

Page({

  /**
   * 页面的初始数据
   */
  data: {
    course: null,
    teacher: null,
    videoList: [],
    buttonText: '立即学习',
    courseStatus: 0,  // 0-不存在，1-学习中，-1-已移除
    myCourseId: null,  // 存储myCourse记录的id
    comments: [], // 评论列表
    commentContent: '', // 评论输入内容
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 支持通过 level 或 id 进入详情页
    if (options.id) {
      this.loadCourseById(options.id)
    } else if (options.level !== undefined) {
      this.loadCourseByLevel(options.level)
    }
    this.loadComments(options.id); // 加载评论
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },

  // 检查课程状态
  checkCourseStatus(courseId) {
    const userId = wx.getStorageSync('userId')
    if (!userId) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      })
      return
    }

    // 先获取记录ID
    wx.request({
      url: 'http://localhost:8080/mycourses/status',
      method: 'GET',
      data: {
        userId: userId,
        courseId: courseId
      },
      success: (res) => {
        console.log('获取记录ID响应:', res.data)
        if (res.data.success) {
          const recordId = res.data.data
          this.setData({
            myCourseId: recordId
          })

          if (recordId === 0) {
            // 如果记录不存在
            this.updateButtonState(0)
          } else {
            // 如果记录存在，获取记录状态
            wx.request({
              url: 'http://localhost:8080/mycourses/' + recordId,
              method: 'GET',
              success: (res) => {
                console.log('获取记录状态响应:', res.data)
                if (res.data.success) {
                  const status = res.data.data.status
                  this.updateButtonState(status)
                }
              },
              fail: (err) => {
                console.error('获取记录状态失败:', err)
              }
            })
          }
        }
      },
      fail: (err) => {
        console.error('获取记录ID失败:', err)
      }
    })
  },

  // 更新按钮状态的辅助方法
  updateButtonState(status) {
    let buttonText = '立即学习'
    if (status === 1) {
      buttonText = '学习中'
    }
    
    this.setData({
      courseStatus: status,
      buttonText: buttonText
    })
  },

  // 通过level获取课程列表，取第一个课程展示
  loadCourseByLevel(level) {
    wx.request({
      url: 'http://localhost:8080/courses/level/' + level,
      method: 'GET',
      success: (res) => {
        if (res.data.data && res.data.data.length > 0) {
          const courseData = res.data.data[0]
          this.setData({
            course: {
              id: courseData.id,
              name: courseData.title,
              duration: courseData.createTime || '',
              level: this.getLevelText(courseData.level),
              coverImg: courseData.coverImg ? (courseData.coverImg.startsWith('http') ? courseData.coverImg : 'http://localhost:8080' + courseData.coverImg) : '/images/ceshi1.jpg',
              desc: courseData.introduce,
              videoList: [],
              videoUrl: ''
            },
            teacher: {
              avatar: '/images/default-avatar.png',
              name: courseData.authorNickname || '未知教师',
              students: '',
              rating: ''
            }
          })
          // 获取该课程的视频列表
          this.loadCourseVideos(courseData.id)
          // 检查课程状态
          this.checkCourseStatus(courseData.id)
        } else {
          wx.showToast({
            title: '无课程数据',
            icon: 'none'
          })
        }
      },
      fail: () => {
        wx.showToast({
          title: '网络错误',
          icon: 'none'
        })
      }
    })
  },

  // 通过课程id获取课程详情
  loadCourseById(id) {
    wx.request({
      url: 'http://localhost:8080/courses/' + id,
      method: 'GET',
      success: (res) => {
        if (res.data.data) {
          const courseData = res.data.data
          this.setData({
            course: {
              id: courseData.id,
              name: courseData.title,
              duration: courseData.createTime || '',
              level: this.getLevelText(courseData.level),
              coverImg: courseData.coverImg ? (courseData.coverImg.startsWith('http') ? courseData.coverImg : 'http://localhost:8080' + courseData.coverImg) : '/images/default-video.png',
              desc: courseData.introduce,
              videoList: [],
              videoUrl: ''
            },
            teacher: {
              avatar: courseData.authorAvatar,
              name: courseData.authorNickname || '未知教师',
              students: '',
              rating: ''
            }
          })
          this.loadCourseVideos(courseData.id)
          // 检查课程状态
          this.checkCourseStatus(courseData.id)
        } else {
          wx.showToast({
            title: '无课程数据',
            icon: 'none'
          })
        }
      },
      fail: () => {
        wx.showToast({
          title: '网络错误',
          icon: 'none'
        })
      }
    })
  },

  // 获取课程视频列表
  loadCourseVideos(courseId) {
    wx.request({
      url: 'http://localhost:8080/videos/course/' + courseId,
      method: 'GET',
      success: (res) => {
        if (res.data.data && res.data.data.length > 0) {
          const videos = res.data.data.map(video => ({
            thumb: video.coverImg || '/images/default-video.png',
            title: video.title,
            desc: video.duration ? (Math.floor(video.duration / 60) + '分钟') : '',
            url: video.url,
            duration: video.duration || 0
          }))
          // 计算总时长（秒转分钟，向下取整）
          const totalSeconds = videos.reduce((sum, v) => sum + v.duration, 0)
          const totalMinutes = Math.floor(totalSeconds / 60)
          this.setData({
            'course.videoList': videos,
            'course.videoUrl': videos.length > 0 ? videos[0].url : '',
            'course.duration': totalMinutes + '分钟'
          })
        }
      }
    })
  },

  // 获取难度等级文本
  getLevelText(level) {
    const levels = {
      0: '基础',
      1: '进阶',
      2: '中级',
      3: '高级'
    }
    return levels[level] || '未知难度'
  },

  // 关注教师
  followTeacher() {
    wx.showToast({
      title: '关注成功',
      icon: 'success'
    })
  },

  // 立即学习按钮点击事件
  onLearnNowClick() {
    const currentCourse = this.data.course;
    if (!currentCourse) {
      wx.showToast({
        title: '课程信息加载失败',
        icon: 'none'
      });
      return;
    }

    const userId = wx.getStorageSync('userId')
    if (!userId) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      })
      return
    }

    // 根据课程状态决定操作
    if (this.data.courseStatus === 1 || this.data.courseStatus === -1) {
      // 如果课程在学习中或已移除，调用DELETE方法
      if (!this.data.myCourseId || this.data.myCourseId === 0) {
        wx.showToast({
          title: '记录ID不存在',
          icon: 'none'
        })
        return
      }

      wx.request({
        url: 'http://localhost:8080/mycourses/' + this.data.myCourseId,
        method: 'DELETE',
        success: (res) => {
          if (res.statusCode === 200 && res.data.success) {
            if (this.data.courseStatus === -1) {
              // 如果之前是已移除状态，现在变为学习中
              this.setData({
                buttonText: '学习中',
                courseStatus: 1
              })
              wx.showToast({
                title: '已加入我的课程',
                icon: 'success'
              })
              // 添加成功后跳转到学习页面
              wx.navigateTo({
                url: '/pages/healthlife/study/study?courseId=' + currentCourse.id
              })
            } else {
              // 如果之前是学习中状态，现在变为立即学习
              this.setData({
                buttonText: '立即学习',
                courseStatus: 0,
                myCourseId: 0
              })
              wx.showToast({
                title: '已移除课程',
                icon: 'success'
              })
            }
          } else {
            wx.showToast({
              title: res.data.message || '操作失败',
              icon: 'none'
            })
          }
        },
        fail: (err) => {
          console.error('移除课程失败:', err)
          wx.showToast({
            title: '网络错误',
            icon: 'none'
          })
        }
      })
    } else if (this.data.courseStatus === 0) {
      // 如果课程不存在，调用POST方法添加
      const myCourse = {
        userId: userId,
        courseId: currentCourse.id,
        status: 1,
        progress: 0
      }

      wx.request({
        url: 'http://localhost:8080/mycourses',
        method: 'POST',
        data: myCourse,
        success: (res) => {
          if (res.statusCode === 200 && res.data.success) {
            this.setData({
              buttonText: '学习中',
              courseStatus: 1,
              myCourseId: res.data.data
            })
            wx.showToast({
              title: '已加入我的课程',
              icon: 'success'
            })
            // 添加成功后跳转到学习页面
            wx.navigateTo({
              url: '/pages/healthlife/study/study?courseId=' + currentCourse.id
            })
          } else {
            wx.showToast({
              title: res.data.message || '添加失败',
              icon: 'none'
            })
          }
        },
        fail: (err) => {
          console.error('添加课程失败:', err)
          wx.showToast({
            title: '网络错误',
            icon: 'none'
          })
        }
      })
    }
  },

  // 加载评论列表
  loadComments(courseId) {
    if (!courseId) return;
    
    wx.request({
      url: `http://localhost:8080/comments/3/${courseId}`,
      method: 'GET',
      success: (res) => {
        if (res.data && res.data.data) {
          const comments = res.data.data;

          if (comments.length === 0) {
            this.setData({ comments: [] });
            return;
          }

          // 使用Promise.all等待所有用户信息获取完毕
          const userPromises = comments.map(comment => {
            return new Promise((resolve) => {
              // 检查 comment.userId 是否存在且有效
              if (!comment.userId) {
                // 如果 userId 不存在，使用默认值并直接 resolve
                resolve({
                  id: comment.id,
                  userName: '匿名用户',
                  userAvatar: '/images/default-avatar.png',
                  content: comment.content,
                  createTime: this.formatTime(comment.createTime)
                });
                return;
              }

              wx.request({
                url: `http://localhost:8080/users/${comment.userId}`, // 假设的用户详情接口
                method: 'GET',
                success: (userRes) => {
                  if (userRes.data && userRes.data.data) {
                    // 将用户信息添加到评论对象中
                    resolve({
                      id: comment.id,
                      userName: userRes.data.data.nickname || '匿名用户', // 使用获取到的昵称
                      userAvatar: userRes.data.data.avatar || '/images/default-avatar.png', // 使用获取到的头像
                      content: comment.content,
                      createTime: this.formatTime(comment.createTime)
                    });
                  } else {
                    // 如果获取用户信息失败，使用默认值
                    resolve({
                      id: comment.id,
                      userName: '匿名用户',
                      userAvatar: '/images/default-avatar.png',
                      content: comment.content,
                      createTime: this.formatTime(comment.createTime)
                    });
                  }
                },
                fail: () => {
                  // 获取用户信息失败，使用默认值
                  resolve({
                    id: comment.id,
                    userName: '匿名用户',
                    userAvatar: '/images/default-avatar.png',
                    content: comment.content,
                    createTime: this.formatTime(comment.createTime)
                  });
                }
              });
            });
          });

          // 等待所有用户请求完成后更新数据
          Promise.all(userPromises).then(commentsWithUserDetails => {
            // 按照时间倒序排序
            commentsWithUserDetails.sort((a, b) => new Date(b.createTime).getTime() - new Date(a.createTime).getTime());
            this.setData({
              comments: commentsWithUserDetails
            });
          });

        } else {
          this.setData({ comments: [] });
        }
      },
      fail: (error) => {
        console.error('获取评论失败：', error);
        wx.showToast({
          title: '获取评论失败',
          icon: 'none'
        });
        this.setData({ comments: [] });
      }
    });
  },

  // 格式化时间辅助函数
  formatTime(isoString) {
    if (!isoString) return '';
    const date = new Date(isoString);
    const year = date.getFullYear();
    const month = ('0' + (date.getMonth() + 1)).slice(-2);
    const day = ('0' + date.getDate()).slice(-2);
    const hours = ('0' + date.getHours()).slice(-2);
    const minutes = ('0' + date.getMinutes()).slice(-2);
    const seconds = ('0' + date.getSeconds()).slice(-2);
    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
  },

  onCommentInput(e) {
    this.setData({
      commentContent: e.detail.value
    });
  },

  onSubmitComment() {
    if (!this.data.commentContent.trim()) {
      wx.showToast({
        title: '请输入评论内容',
        icon: 'none'
      });
      return;
    }

    const userId = wx.getStorageSync('userId');
    if (!userId) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      });
      return;
    }

    const commentData = {
      userId: Number(userId),
      type: 3, // 课程评论
      typeId: this.data.course.id,
      content: this.data.commentContent,
      status: 1
    };

    wx.request({
      url: 'http://localhost:8080/comments',
      method: 'POST',
      data: commentData,
      success: (res) => {
        if (res.data && res.data.success) {
          wx.showToast({
            title: '评论成功',
            icon: 'success'
          });
          this.setData({ commentContent: '' });
          // 重新加载评论列表
          this.loadComments(this.data.course.id);
        } else {
          wx.showToast({
            title: res.data.message || '评论失败',
            icon: 'none'
          });
        }
      },
      fail: (error) => {
        console.error('提交评论失败：', error);
        wx.showToast({
          title: '网络错误',
          icon: 'none'
        });
      }
    });
  }
})